package main

import (
	"fmt"
	"time"
)

// goroutine 协程,
// 轻量级“线程，非抢占式多任务处理，由协程主动交出控制权；编译器/解释器/虚拟机层面的多任务；多个协程可能在一个或多个线程上运行
// 子程序是协程的一个特例
// 任何函数只需加上 go 就能送给调度器运行; 不需要在定义时区分是否是异步函数; 调度器在合适的点进行切换,race 数据冲突，
// 切换点： I/0、select、channel、函数调用(有时)、runtime.Gosched()、等待锁

func main() {
	for i := 0; i < 100; i++ {
		go func(i int) {
			for {
				fmt.Printf("hello from goroutine %d\n", i)
			}
		}(i)
	}
	time.Sleep(time.Millisecond)
}
